package cn.edu.xjtu.carlWay.linkedList.removeLinkedListElements;

import cn.edu.xjtu.Util.ListNode.ListNode;
import cn.edu.xjtu.Util.ListNode.ListNodeUtil;

/**
 * 203. 移除链表元素
 * 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
 */
public class Solution {
    public static void main(String[] args) {
        int[] nums = {7, 7, 7};
        ListNode head = ListNodeUtil.generate(nums);
        Solution solution = new Solution();
        ListNode newNode = solution.removeElements(head, 7);
        ListNodeUtil.print(newNode);
    }

    public ListNode removeElements(ListNode head, int val) {
        if (head == null) {
            return null;
        }
        ListNode newHead = head;
        ListNode pre = null;
        ListNode temp = head;
        while (temp != null) {
            if (temp.val == val) {
                if (pre == null) {
                    newHead = temp.next;
                } else {
                    pre.next = temp.next;
                }
            } else {
                pre = temp;
            }
            temp = temp.next;
        }

        return newHead;
    }
}
